<?php
/**
 * Clase principal para el manejo de sesiones
 *
 * @author Robert Babilonia <bobbabilon2@gmail.com>
 * 
 */
final class CommanderSession {
    
    
    /**
     * @var string Identificador de la session iniciada
     * 
     */
    public static $s_id;
    
    /**
     * @var string Identificador de las variables de sesion
     * 
     */
    public static $session_name='commander_session';
  
    
    
    
    /**
     * Inicia una sesion
     * @return boolean Indica exito o fracaso en el inicio de la session
     * @todo Agregar parametros de configuracion tales como tiempo de expiracion de la sesion
     */
    public static function start(){
        
        
        $booleano=session_start();
        if($booleano) 
            self::$s_id=session_id();
        
        return $booleano;;
        
    }

    /**
     * Destruye una sesion
     * @return boolean Indica exito o fracaso en la destruccion de la sesion
     */
    public static function end(){

       return session_destroy();
    }

    
    /**
     * Permite registrar una nueva variable de sesion
     * @param string $session_index Indice a registrar
     * @param string $session_var Valor a registrar
     * @param string $_name_space Espacio de nombre para el conjunto de variables de sesion que se manejan
     */
    public static function register($session_index, $session_var, $_name_space=SESSION_NAME_SPACE){
        
        $_SESSION[self::$session_name][$_name_space][$session_index]=$session_var;

    }
    
    /**
     * Elimina una variable de session
     * @param string $session_index Indice a eliminar
     * @param string $_name_space Espacio de nombre para el conjunto de variables de sesion que se manejan
     */
    public static function unregister($session_index, $_name_space=SESSION_NAME_SPACE){
        
        
        unset($_SESSION[self::$session_name][$_name_space][$session_index]);
        
        
    }
    
    /**
     * Obtiene una variable de session
     * @param string $session_index Indice a obtener
     * @param string $_name_space Espacio de nombre para el conjunto de variables de sesion que se manejan
     */
    public static function get($session_index, $_name_space=SESSION_NAME_SPACE){
        
        
        return $_SESSION[self::$session_name][$_name_space][$session_index];
        
        
    }
    
    /**
     * Obtiene todas las variables de session de un espacio de nombres
     * @param string $_name_space Espacio de nombre para el conjunto de variables de sesion que se manejan
     */
    public static function get_all($_name_space=SESSION_NAME_SPACE){
        
        
        return $_SESSION[self::$session_name][$_name_space];
        
    }
    
    
    /**
     * Verifica la existencia de una variable de session
     * @param string $session_index Indice a registrar
     * @param string $_name_space Espacio de nombre para el conjunto de variables de sesion que se manejan
     * @return boolean Indica si existe o no la variable de sesion indicada
     */
    public static function exist($session_index, $_name_space=SESSION_NAME_SPACE){
        
        
         return isset($_SESSION[self::$session_name][$_name_space][$session_index]);
        
        
    }
    
    
    
}

?>